iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0
Security

一個人的藍隊系列 第 2

第一次架設Wazuh就上手

  • 分享至 

  • xImage
  •  

這邊文章會利用 Docker-compose架設wazuh伺服器
下一篇文章才會安裝,連線到Wazuh確認agent有work

摘要回顧甚麼是Wazh~
資訊安全在現代科技環境中變得至關重要。
Wazuh 是一個開源的資安資訊和事件管理平台,幫助組織監控和保護系統免受各種威脅。

首先,確保你的系統已經安裝了 Docker 和 Docker Compose
這邊我就不教學docker相關的安裝跟操作了

接著我們要使用Docker-compose來建立Wazuh
官方其實已經有提供了使用Docker部署Wazuh的教學與docker-compose.yml檔案

https://documentation.wazuh.com/current/deployment-options/docker/wazuh-container.html

架設主要可以分成單點以及多點部署,如果有足夠的資源,也需要高可用性的情況下,絕對是優先首選multi
但這邊我的示範都是採用單點部署,一來是示範跟操作都更單純容易,再來是也是呼應主題有限資源下的資安防禦的建置

接著進入手把手架設教學,依照下列流程進行
這邊我們以直接以root進行操作,sudo -s切換成root

選擇一個你想要的目錄(我直接切換到root目錄),
然後將github上的程式碼給checkout下來

git clone https://github.com/wazuh/wazuh-docker.git -b v4.5.0

進入到single-node的目錄,執行以下的指令,目的是要產生憑證

cd wazuh-docker/single-node/
docker-compose -f generate-indexer-certs.yml run --rm generator

接下來我們在single-node目錄下執行

docker-compose up -d

-d是表示要在背景執行,這樣應該就可以成功把wazuh架設起來了
是不是非常簡單的呢!docker就是這麼的方便阿XD

我們可以從幾個地方確認有沒有錯誤資訊
確認運行狀態

docker ps -a

查看log,我們可以使用docker-compose來查看全部的log
或是單獨查看某個容器的log資訊

docker-compose logs
docker logs single-node_wazuh.manager_1

直接訪問https:// 確認服務正常運行
使用預設的帳號密碼admin:SecretPassword登入

登入之後它會自行進行health的檢查,每個檢查項目都打勾就OK了

https://ithelp.ithome.com.tw/upload/images/20230917/20114110EgqniZN48M.png

以下附上這次啟動時使用的官方的docker-compose內容
順便先簡單提一下關於這個內容
我知道內容有點長QQ 不過身為一個有責任的專家
還是請先看過內容了解一下大概都是甚麼設定

# Wazuh App Copyright (C) 2017, Wazuh Inc. (License GPLv2)
version: '3.7'

services:
  wazuh.manager:
    image: wazuh/wazuh-manager:4.5.0
    hostname: wazuh.manager
    restart: always
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 655360
        hard: 655360
    ports:
      - "1514:1514"
      - "1515:1515"
      - "514:514/udp"
      - "55000:55000"
    environment:
      - INDEXER_URL=https://wazuh.indexer:9200
      - INDEXER_USERNAME=admin
      - INDEXER_PASSWORD=SecretPassword
      - FILEBEAT_SSL_VERIFICATION_MODE=full
      - SSL_CERTIFICATE_AUTHORITIES=/etc/ssl/root-ca.pem
      - SSL_CERTIFICATE=/etc/ssl/filebeat.pem
      - SSL_KEY=/etc/ssl/filebeat.key
      - API_USERNAME=wazuh-wui
      - API_PASSWORD=MyS3cr37P450r.*-
    volumes:
      - wazuh_api_configuration:/var/ossec/api/configuration
      - wazuh_etc:/var/ossec/etc
      - wazuh_logs:/var/ossec/logs
      - wazuh_queue:/var/ossec/queue
      - wazuh_var_multigroups:/var/ossec/var/multigroups
      - wazuh_integrations:/var/ossec/integrations
      - wazuh_active_response:/var/ossec/active-response/bin
      - wazuh_agentless:/var/ossec/agentless
      - wazuh_wodles:/var/ossec/wodles
      - filebeat_etc:/etc/filebeat
      - filebeat_var:/var/lib/filebeat
      - ./config/wazuh_indexer_ssl_certs/root-ca-manager.pem:/etc/ssl/root-ca.pem
      - ./config/wazuh_indexer_ssl_certs/wazuh.manager.pem:/etc/ssl/filebeat.pem
      - ./config/wazuh_indexer_ssl_certs/wazuh.manager-key.pem:/etc/ssl/filebeat.key
      - ./config/wazuh_cluster/wazuh_manager.conf:/wazuh-config-mount/etc/ossec.conf

  wazuh.indexer:
    image: wazuh/wazuh-indexer:4.5.0
    hostname: wazuh.indexer
    restart: always
    ports:
      - "9200:9200"
    environment:
      - "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - wazuh-indexer-data:/var/lib/wazuh-indexer
      - ./config/wazuh_indexer_ssl_certs/root-ca.pem:/usr/share/wazuh-indexer/certs/root-ca.pem
      - ./config/wazuh_indexer_ssl_certs/wazuh.indexer-key.pem:/usr/share/wazuh-indexer/certs/wazuh.indexer.key
      - ./config/wazuh_indexer_ssl_certs/wazuh.indexer.pem:/usr/share/wazuh-indexer/certs/wazuh.indexer.pem
      - ./config/wazuh_indexer_ssl_certs/admin.pem:/usr/share/wazuh-indexer/certs/admin.pem
      - ./config/wazuh_indexer_ssl_certs/admin-key.pem:/usr/share/wazuh-indexer/certs/admin-key.pem
      - ./config/wazuh_indexer/wazuh.indexer.yml:/usr/share/wazuh-indexer/opensearch.yml
      - ./config/wazuh_indexer/internal_users.yml:/usr/share/wazuh-indexer/opensearch-security/internal_users.yml

  wazuh.dashboard:
    image: wazuh/wazuh-dashboard:4.5.0
    hostname: wazuh.dashboard
    restart: always
    ports:
      - 443:5601
    environment:
      - INDEXER_USERNAME=admin
      - INDEXER_PASSWORD=SecretPassword
      - WAZUH_API_URL=https://wazuh.manager
      - DASHBOARD_USERNAME=kibanaserver
      - DASHBOARD_PASSWORD=kibanaserver
      - API_USERNAME=wazuh-wui
      - API_PASSWORD=MyS3cr37P450r.*-
    volumes:
      - ./config/wazuh_indexer_ssl_certs/wazuh.dashboard.pem:/usr/share/wazuh-dashboard/certs/wazuh-dashboard.pem
      - ./config/wazuh_indexer_ssl_certs/wazuh.dashboard-key.pem:/usr/share/wazuh-dashboard/certs/wazuh-dashboard-key.pem
      - ./config/wazuh_indexer_ssl_certs/root-ca.pem:/usr/share/wazuh-dashboard/certs/root-ca.pem
      - ./config/wazuh_dashboard/opensearch_dashboards.yml:/usr/share/wazuh-dashboard/config/opensearch_dashboards.yml
      - ./config/wazuh_dashboard/wazuh.yml:/usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml
    depends_on:
      - wazuh.indexer
    links:
      - wazuh.indexer:wazuh.indexer
      - wazuh.manager:wazuh.manager

volumes:
  wazuh_api_configuration:
  wazuh_etc:
  wazuh_logs:
  wazuh_queue:
  wazuh_var_multigroups:
  wazuh_integrations:
  wazuh_active_response:
  wazuh_agentless:
  wazuh_wodles:
  filebeat_etc:
  filebeat_var:
  wazuh-indexer-data:

可以看到啟動了三個容器
分別為
wazuh/wazuh-manager:4.5.0
wazuh/wazuh-indexer:4.5.0
wazuh/wazuh-dashboard:4.5.0
三個服務的用途與架構會在後面文章介紹

然後可以看到有透過ulimits、environment來設定一些資源使用限制的參數
還有內容當中有寫入服務彼此間串API需要的機敏資訊
有使用過ELK的人也可以注意到他服務使用的9200和5601 Port是不是有點熟悉
因為Wazuh那兩個服務的確就是從ELK模改而來

接著可以注意到檔案中已經寫好需要mount的volumes
這邊mount同時使用了兩種方式,兩種都是持久性儲存的方式
也就是容器被刪除後,資料還是會保留
是實際上很常使用的方式,對於升級或是轉移也是方便

第一種方式是named volume方式,可以我們架設完成後
也就是yml最下面的部分

volumes:
  wazuh_api_configuration:
  wazuh_etc:
  wazuh_logs
  ...

架設完之後可以發現,
當前路徑當中並沒有出現wazuh_api_configuration這個目錄

https://ithelp.ithome.com.tw/upload/images/20230917/20114110rvTYRfQB3W.png

這個其實是透過docker自行管理的目錄
當然也是會儲存在實體的主機路徑上
預設情況會被儲存在/var/lib/docker/volumes
這種方式有許多好處,可以直接使用docker volume指令管理
也不用太過於注意關於權限的問題

第二種是bind mount的方式
在我們剛剛啟動docker-compose up的路徑下
可以看到存在config這個目錄
這樣的方式,以這次啟動的方式的確不會有甚麼問題
不過如果你是要將原先的檔案給mount進container當中
必須要特別注意到檔案擁有者以及權限問題

會特別提到這一點
是因為我在自行架設wazuh的時候
其實是有全部改寫整個docker-compose的,有遇到權限的一些問題
但改寫這件事情不會涵蓋在這系列的文章,因為其實完全沒有特別必要XDDD
我是因為一些習慣與管理問題,全面改寫成使用bind mount的方式
主機上的目錄結構也重新編排過
當然,即使改寫mount方式跟目錄,進到容器裡面之後內容是完全一樣的
總之,在改寫架設的過程當中,遇到幾個owner與權限的問題
所以也稍微提醒大家


上一篇
一個人的藍隊-甚麼是Wazuh?打造你的鷹眼
下一篇
Wazuh Agent安裝與介面查看
系列文
一個人的藍隊30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言